<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script>
      window.onload = function () {
        // 改变函数内部this指向三种方法 call() allly() bind()

        // 2.apply() 应用 参数必须是数组（伪数组）

        // var o = {
        //   name: "andy",
        // };
        // function fn(arr) {
        //   console.log(this);
        //   console.log(arr);
        // }
        // fn.apply(o, ["ffff"]);
        // //   apply 主要应用 利用apply 借助于数学内置对象求最大值 最小值
        // var arr = [1, 22, 33, 44, 55];
        // var max = Math.max.apply(Math, arr);
        // var min = Math.min.apply(Math, arr);
        // console.log(max, min);

        // 3.bind() 绑定
        // 不好调用原来的函数 可以改变原来函数内部的this指向
        // 返回的是原数组改变this指向后的新函数
        var o = {
          name: "andy",
        };
        function fn(a, b) {
          console.log(this);
          console.log(a + b);
        }
        var f = fn.bind(o, 1, 2);
        f();
        // // 点击按钮，禁用三秒后开启
        //         var btn = document.querySelector("button");
        //         btn.onclick = function () {
        //           this.disabled = true;
        //           setTimeout(
        //             function () {
        //               this.disabled = false;
        //             }.bind(this),
        //             3000
        //           );
        //         };

        var btns = document.querySelectorAll("button");
        for (var i = 0; i < btns.length; i++) {
          btns[i].onclick = function () {
            this.disabled = true;
            setTimeout(
              function () {
                this.disabled = false;
              }.bind(this),
              2000
            );
          };
        }
      };
    </script>
  </head>
  <body>
    <button>点击</button>
    <button>点击</button>
    <button>点击</button>
  </body>
</html>
